
//2337.移动片段得到字符串
class Solution {
public:
    bool canChange(string start, string target) {
        //如果两个字符串是构成移动片段的说明：start和target的字符向后顺序是一一对应
        //所以可以先判断其字符的先后顺序
        string s=start,t=target;
        s.erase(remove(s.begin(),s.end(),'_'),s.end());
        t.erase(remove(t.begin(),t.end(),'_'),t.end());

        if(s!=t) return false;  //如果字符串的向后顺序不一样一定不能构成移动片段
        
        //字符的向后顺序一致，判断start时候能通过移动得到target
        int i=0,j=0;
        int n=start.size();
        while(i<n&&j<n)
        {
            while(start[i]=='_') i++;
            while(target[j]=='_') j++;

            if(start[i]=='L'&&i<j) return false;  //当遇到L的时候，start的L在target的前面，此时的L就不能移至与target相同位置
            else if(start[i]=='R'&&i>j) return false;  //当遇到R的时候，start的R在target的后面，此时的R就不能移至与target相同位置
            i++,j++;
        }
        return true;
    }
};